package com.cskaoyan.javase.oop1._4compare;

/**
 * 局部变量和成员变量的比较，我们从以下五个方面去比较：
 *      1.在类中定义的位置不同
 *          成员变量: 定义在类中的成员位置,成员位置指的是类体中,局部位置以外的位置
 *          局部变量: 定义在类中的局部位置,局部位置指的是代码块当中
 *              代码块指的是:
 *                  1,方法体中
 *                  2,类体中的大括号之中
 *                  3,类体的大括号当中,是成员位置
 *      2.在内存中的位置不同
 *          成员变量: 存储在堆上的对象中
 *          局部变量: 存储在方法的栈帧中
 *
 *      3.生命周期不同
 *          成员变量: 理论上来说,成员变量和对象"同生共死"
 *              但实际上当一个对象的引用被销毁以后,即便该对象没有被GC垃圾回收
 *              但是该对象就已经无法使用了,对象中的成员变量实际上也就没用了.
 *
 *          局部变量: 和方法调用"同生共死"
 *
 *      4.有无默认初始化不同
 *          成员变量: 具有默认初始化,即便不进行任何手动赋值初始化,它也是有默认值,不强制进行手动初始化.
 *          局部变量: 没有默认初始化,必须手动初始化才能够被使用,否则是不可用的
 *
 *      5.作用范围
 *          成员变量: 在整个类的成员方法中都是可以随意访问的,但是在static方法中是不能被直接访问的
 *          局部变量: 仅在作用域内部生效,更具体点来说就是仅在装有局部变量的大括号内部生效.
 *
 * @since 10:42
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int a = 10;
        if (true) {
            int b = 10;
        }
    }
}

class A {
    int a;

    public void test() {
        System.out.println(a);
    }

    public static void testStatic() {
        // System.out.println(a);
    }
}